package com.volcreate.exception_collection.no3;

import java.util.Arrays;
import java.util.Scanner;

/**
 * @author zxc
 * @date 2020/10/6
 */
public class Main {
    public static void main(String[] args) {
//        System.out.println(arrayIntegerStack.size());
        Scanner scanner = new Scanner(System.in);
        // 输入n，建立可包含n个元素的ArrayIntegerStack对象
        int n = scanner.nextInt();
        ArrayIntegerStack stack = new ArrayIntegerStack(n);
        // 输入m个值，均入栈。每次入栈均打印入栈返回结果。
        int m = scanner.nextInt();
        for (int i = 0; i < m; i++) {
            int i1 = scanner.nextInt();
            System.out.println(stack.push(i1));
        }
        // 输出栈顶元素，输出是否为空，输出size
        System.out.println(stack.peek() + "," + stack.empty() + "," + stack.size());
        // 使用Arrays.toString()输出内部数组中的值。
        System.out.println(stack);
        // 输入x，然后出栈x次，每次出栈均打印。
        int x = scanner.nextInt();
        for (int i = 0; i < x; i++) {
            System.out.println(stack.pop());
        }
        // 输出栈顶元素，输出是否为空，输出size
        System.out.println(stack.peek() + "," + stack.empty() + "," + stack.size());
        // 使用Arrays.toString()输出内部数组中的值。
        System.out.println(stack);
    }
}

interface IntegerStack {
    public Integer push(Integer item);
//如果item为null，则不入栈直接返回null。如果栈满，也返回null。如果插入成功，返回item。

    public Integer pop();   //出栈，如果为空，则返回null。出栈时只移动栈顶指针，相应位置不置为null

    public Integer peek();  //获得栈顶元素，如果为空，则返回null.

    public boolean empty(); //如果为空返回true

    public int size();      //返回栈中元素个数
}

class ArrayIntegerStack implements IntegerStack {

    private Integer[] arr;
    private int count;

    ArrayIntegerStack(int size) {
        arr = new Integer[size];
        count = 0;
    }

    @Override
    public Integer push(Integer item) {
        if (item == null || count == arr.length) {
            return null;
        }
        arr[count++] = item;
        return item;
    }

    @Override
    public Integer pop() {
        if (count == 0) return null;

        count--;
        return arr[count];
    }

    @Override
    public Integer peek() {
        if (count == 0) return null;
        return arr[count - 1];
    }

    @Override
    public boolean empty() {
        if (count == 0) return true;
        return false;
    }

    @Override
    public int size() {
        return count;
    }

    @Override
    public String toString() {
        return Arrays.toString(arr);
    }
}

